using System;

using Pegasus.Diagnostics;

namespace Pegasus.Workflow.Service
{
	/// <summary>
	/// Event args for when the workflow changes states.
	/// </summary>
	[Serializable]
	public class WorkflowStateEventArgs : WorkflowEventArgs
	{
		// Local Instance Values
		private string m_prevNextState;

		/// <summary>
		/// Initializes a new instance of the <see cref="T:WorkflowStateEventArgs"/> class.
		/// </summary>
		/// <param name="workflowId">The workflow id.</param>
		/// <param name="prevNextState">Name of the prev/next State.</param>
		public WorkflowStateEventArgs( int workflowId, string prevNextState ) :
			base( workflowId )
		{
			// Check Parameters
			ParamCode.AssertRange( workflowId, 1, int.MaxValue, "workflowId" );
			// prevNextState can be null (if the workflow is starting or exiting)

			m_prevNextState = prevNextState;
		}

		/// <summary>
		/// Gets the name of the previous/next state.
		/// </summary>
		/// <value>The name of the state, null if the workflow is starting or exiting.</value>
		public string PreviousOrNextState
		{
			get
			{
				return m_prevNextState;
			}
		}
	}
}
